package chapter15;

import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: Tx
 * @Date: 2022/5/26 21:16
 */
@SuppressWarnings("all")
public class GenericDetail01 {
    public static void main(String[] args) {
//        1.泛型指向的数据类型是引用类型，不能是基本数据类型
        ArrayList<Integer> integers = new ArrayList<>();
//        ArrayList<int> integers1 = new ArrayList<int>();
//        2.再给泛型指定具体类型后，可以传入该类型或者其子类型
        Animal<A> aAnimal = new Animal<A>(new A());
        Animal<A> aAnimal1 = new Animal<A>(new B());
//        3.泛型的使用
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();
//        在实际开发是，我们往往简写，因为编译器会进行类型推断
        ArrayList<Integer> list3 = new ArrayList<>();
        List<Integer> list4 = new ArrayList<>();
//        4.如果没有对泛型指定具体数据类型，默认是Object
        ArrayList list5 = new ArrayList();
//        与上面5写法等价
        ArrayList<Object> list6 = new ArrayList<>();
    }
}
class A{}
class B extends A{}
class Animal<E>{
    E e;

    public Animal(E e) {
        this.e = e;
    }
}
